﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
    public partial class Autor : Form
    {
        DataSet dsAutores = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEstado = new CheckBox();
        BindingManagerBase bmAutores;

        public Autor()
        {
            InitializeComponent();
        }

        private void NuevoAutor_Load(object sender, EventArgs e)
        {
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * from Autores", cnBiblioteca); 

            adp.Fill(dsAutores, "Autores");
            cnBiblioteca.Close();
            
            Grilla_Aut.DataSource = dsAutores.Tables["Autores"];
            Grilla_Aut.Refresh();
            TitulosColumnas();

            bmAutores = BindingContext[dsAutores, "Autores"];
            AsociarTextos();
            MostrarPosicion();
            Paises();
        }


        private void TitulosColumnas()
        {
            Grilla_Aut.Columns["Cod_Aut"].HeaderText = "CODIGO";
            Grilla_Aut.Columns["Nom_Aut"].HeaderText = "NOMBRE";
            Grilla_Aut.Columns["Ape_Aut"].HeaderText = "APELLIDOS";
            Grilla_Aut.Columns["Nac_Aut"].HeaderText = "NACIONALIDAD";
            Grilla_Aut.Columns["Web_Aut"].HeaderText = "WEB";
            Grilla_Aut.Columns["Blog_Aut"].HeaderText = "BLOG";
            Grilla_Aut.Columns["Est_Aut"].HeaderText = "ESTADO";
        }

        private void ReemplazarControl(Control controlAnterior,
                               Control controlNuevo)
        // Esta rutina reemplaza al controlAnterior por el controlNuevo
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            //Esta rutina recibe como parametro un control y un estado
            //que queremos aplicar a ese control en sus propiedades
            //Enabled y Visible
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEstado, ChbEstado);
            this.Controls.Add(ChbEstado);
            HabilitarControl(TxtEstado, false);
        }

         private void AsociarTextos()
        {
            TxtCod_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[0].ColumnName.ToString()));
            TxtNom_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[1].ColumnName.ToString()));
            TxtApe_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[2].ColumnName.ToString()));
            TxtNac_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[3].ColumnName.ToString()));
            TxtWeb_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[4].ColumnName.ToString()));
            TxtBlog_Aut.DataBindings.Add(new Binding("Text", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[5].ColumnName.ToString()));
            ChbEstado.DataBindings.Add(new Binding("Checked", dsAutores, "Autores." + dsAutores.Tables["Autores"].Columns[6].ColumnName.ToString()));
        }

        private void MostrarPosicion()
        {
            //Total Registros
            int iTotal = bmAutores.Count;
            //Numero (1, 2, ....) de registro
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmAutores.Position + 1;
                //Mostrar informacion en la etiqueta
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void BtnPrimero_Click(object sender, EventArgs e)
        {
            bmAutores.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmAutores.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmAutores.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmAutores.Position = bmAutores.Count - 1;
            MostrarPosicion();
        }

       

        private void BtnAñadir_Click(object sender, EventArgs e)
        {
            DataTable Autores = dsAutores.Tables["Autores"];
            DataRowCollection cfilas = Autores.Rows;
            DataRow nuevaFila;
            try
            {
                nuevaFila = Autores.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = "Cod_Aut";
                nuevaFila[1] = "Nom_Aut";
                nuevaFila[2] = "Ape_Aut";
                nuevaFila[3] = "Nac_Aut";
                nuevaFila[4] = "";
                nuevaFila[5] = "";
                nuevaFila[6] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Aut.Enabled = true;
                TxtCod_Aut.Focus();
            }
            catch (ConstraintException ex)
            {
                // Capturar posible error por clave duplicada
                MessageBox.Show(ex.Message);
            }
        }
              

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            GestAutor GAutor = new GestAutor();
            if (GAutor.ExisteAutor(TxtCod_Aut.Text, rutaBDBiblioteca))
                LblResultado.Text = "Autor Existente";
            else
            {
                CAutor NuevoAutor =
                     new CAutor(TxtCod_Aut.Text, TxtNom_Aut.Text, TxtApe_Aut.Text, TxtNac_Aut.Text, TxtWeb_Aut.Text, TxtBlog_Aut.Text, ChbEstado.Checked);
                if (!GAutor.GrabarAutor(NuevoAutor, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro del Autor";
                else
                {
                    LblResultado.Text = "Autor Guardado";
                }
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestAutor GAutor = new GestAutor();
            CAutor EliminarAutor =
                     new CAutor(TxtCod_Aut.Text, TxtNom_Aut.Text, TxtApe_Aut.Text, TxtNac_Aut.Text, TxtWeb_Aut.Text, TxtBlog_Aut.Text, ChbEstado.Checked=false);

            if (GAutor.EliminarAutor(EliminarAutor, rutaBDBiblioteca))
            {
                LblResultado.Text = "Autor Eliminado";
                bmAutores.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Autor no Eliminado";
        }

        
        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestAutor GAutor = new GestAutor();
            CAutor ModificarAutor = new CAutor(TxtCod_Aut.Text, TxtNom_Aut.Text, TxtApe_Aut.Text, TxtNac_Aut.Text, TxtWeb_Aut.Text, TxtBlog_Aut.Text, ChbEstado.Checked);
            if (GAutor.ModificarAutor(ModificarAutor, rutaBDBiblioteca))
            {
                LblResultado.Text = "Autor Modificado";
            }
            else
                LblResultado.Text = "Autor no Modificado";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsAutores.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Autores", cnBiblioteca);

            adp.Fill(dsAutores, "Autores");
            cnBiblioteca.Close();
            Grilla_Aut.DataSource = dsAutores.Tables["Autores"];
            bmAutores = BindingContext[dsAutores, "Autores"];
            bmAutores.Position = bmAutores.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            bmAutores.Position = 0;
            MostrarPosicion();
            //TxtCod_Aut.Focus();
        }

        private void TxtCod_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsPunctuation(e.KeyChar))
                        e.Handled = false;
                        else
                            if (Char.IsDigit(e.KeyChar))
                            e.Handled = false;
                                else
                                    e.Handled = true;
        } 


        private void TxtNom_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if(Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtApe_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
           if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtNac_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
           if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtWeb_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsPunctuation(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtBlog_Aut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else if (Char.IsPunctuation(e.KeyChar))
                    e.Handled = false;
                    else
                        e.Handled = true;
        }

        private void TxtCod_Aut_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Aut.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Aut, "Ingrese el Codigo del Autor");
            }
            else
                errorProvider1.SetError(TxtCod_Aut, null);
        }

        private void TxtNom_Aut_Validating(object sender, CancelEventArgs e)
        {
            if (TxtNom_Aut.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtNom_Aut, "Ingrese Nombre del Autor");
            }
            else
                errorProvider1.SetError(TxtNom_Aut, null);
        }

        private void TxtApe_Aut_Validating(object sender, CancelEventArgs e)
        {
            if (TxtApe_Aut.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtApe_Aut, "Ingrese Apellido del Autor");
            }
            else
                errorProvider1.SetError(TxtApe_Aut, null);
        }

        private void LsbNac_SelectedIndexChanged(object sender, EventArgs e)
        {
            TxtNac_Aut.Text = LsbNac.Text;
        }

        private void Paises()
        {
            LsbNac.Items.Add("Alemania");
            LsbNac.Items.Add("Argentina");
            LsbNac.Items.Add("Australia");
            LsbNac.Items.Add("Austria");
            LsbNac.Items.Add("Bolivia");
            LsbNac.Items.Add("Brasil");
            LsbNac.Items.Add("Chile");
            LsbNac.Items.Add("Colombia");
            LsbNac.Items.Add("Cuba");
            LsbNac.Items.Add("Ecuador");
            LsbNac.Items.Add("España");
            LsbNac.Items.Add("Estados Unidos");
            LsbNac.Items.Add("Francia");
            LsbNac.Items.Add("Guatemala");
            LsbNac.Items.Add("Irlanda");
            LsbNac.Items.Add("Italia");
            LsbNac.Items.Add("México");
            LsbNac.Items.Add("Mónaco");
            LsbNac.Items.Add("Nicaragua");
            LsbNac.Items.Add("Panamá");
            LsbNac.Items.Add("Perú");
            LsbNac.Items.Add("Portugal");
            LsbNac.Items.Add("Puerto Rico");
            LsbNac.Items.Add("Reino Unido");
            LsbNac.Items.Add("República Dominicana");
            LsbNac.Items.Add("Suecia");
            LsbNac.Items.Add("Sudáfrica");
            LsbNac.Items.Add("Trinidad y Tobago");
            LsbNac.Items.Add("Uruguay");
            LsbNac.Items.Add("Venezuela");            
        }

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
     




//Codigo anterior:
// DataSet ds = new DataSet();
//        string rutaBDBiblioteca = " Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";  

//        public Listado_Autores()
//        {
//            InitializeComponent();
//        }
               

//        private void Listado_Autores_Load(object sender, EventArgs e)
//        {
//            SqlConnection cnBiblioteca;

//            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

//            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
//            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Autores", cnBiblioteca);

//            adp.Fill(ds, "Autores");
//            cnBiblioteca.Close();
//            Grilla_Aut.DataSource = ds.Tables["Autores"];

//            Grilla_Aut.Columns["Cod_Aut"].HeaderText = "Codigo";
//            Grilla_Aut.Columns["Nom_Aut"].HeaderText = "Nombre Autor";
//            Grilla_Aut.Columns["Ape_Aut"].HeaderText = "Apellido Autor";
//            Grilla_Aut.Columns["Nac_Aut"].HeaderText = "Nacionalidad";
//            Grilla_Aut.Columns["Web_Aut"].HeaderText = "Web Autor";
//            Grilla_Aut.Columns["Blog_Aut"].HeaderText = "Bolg Autor";
//        }


//        private void ActualizarCambios(String rutaBDBiblioteca, ref DataSet ds)
//        {
//            DataSet dsActualizar;
//            DataSet dsEliminar;
//            DataSet dsAgregar;
//            //Modificar 
//            if (ds.HasChanges(DataRowState.Modified))
//            {
//                dsActualizar = new DataSet();
//                dsActualizar = ds.GetChanges(DataRowState.Modified);
//                ActualizarAutoresEnBD(rutaBDBiblioteca, "Autores", dsActualizar);
//            }
//            //Agregar  
//            if (ds.HasChanges(DataRowState.Added))
//            {
//                dsAgregar = new DataSet();
//                dsAgregar = ds.GetChanges(DataRowState.Added);
//                InsertarAutoresEnBD(rutaBDBiblioteca, "Autores", dsAgregar);
//            }
//            //Eliminar 
//            if (ds.HasChanges(DataRowState.Deleted))
//            {
//                dsEliminar = new DataSet();
//                dsEliminar = ds.GetChanges(DataRowState.Deleted);
//                EliminarAutoresEnBD(rutaBDBiblioteca, "Autores", dsEliminar);
//            }
//        }

//        private void ConstruirParametrosAutores(ref SqlCommand Comando, DataRow fila)
//        {
//            SqlParameter SqlParametros = new SqlParameter();
//            SqlParametros = Comando.Parameters.Add("@Cod_Aut", SqlDbType.Char, 6);
//            SqlParametros.Value = fila["Cod_Aut"];  
//            SqlParametros = Comando.Parameters.Add("@Nom_Aut", SqlDbType.VarChar, 50);
//            SqlParametros.Value = fila["Nom_Aut"];
//            SqlParametros = Comando.Parameters.Add("@Ape_Aut", SqlDbType.VarChar, 50);
//            SqlParametros.Value = fila["Ape_Aut"];
//            SqlParametros = Comando.Parameters.Add("@Nac_Aut", SqlDbType.VarChar, 30);
//            SqlParametros.Value = fila["Nac_Aut"];
//            SqlParametros = Comando.Parameters.Add("@Web_Aut", SqlDbType.VarChar, 60);
//            SqlParametros.Value = fila["Web_Aut"];
//            SqlParametros = Comando.Parameters.Add("@Blog_Aut", SqlDbType.VarChar, 60);
//            SqlParametros.Value = fila["Blog_Aut"];
//        }

//        private void ConstruirParametrosAutoresEliminar(ref SqlCommand Comando, DataRow fila)
//        {
//            SqlParameter SqlParametros = new SqlParameter();
//            SqlParametros = Comando.Parameters.Add("Cod_Aut", SqlDbType.Char, 6);
//            SqlParametros.Value = fila["Cod_Aut"];
//        }

//        private void ActualizarAutoresEnBD(String rutaBDBiblioteca, String NombreTabla, DataSet ds)
//        {
//            int FilasActualizadas;
//            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
//            {
//                SqlCommand Comando = new SqlCommand();
//                ConstruirParametrosAutores(ref Comando, fila);
//                FilasActualizadas = EjecutarSPAutores(rutaBDBiblioteca, "spActualizarAutores", Comando);
//                MessageBox.Show("Se Modificaron: " + FilasActualizadas + "Autores");
//            }
//        }

//        private int EjecutarSPAutores(String rutaBDBiblioteca, String NombreSP, SqlCommand Comando)
//        {
//            int FilasCambiadas;
//            SqlConnection Conexion = new SqlConnection(rutaBDBiblioteca);
//            Conexion.Open();
//            SqlCommand cmd = new SqlCommand();
//            cmd = Comando;
//            cmd.Connection = Conexion;
//            cmd.CommandType = CommandType.StoredProcedure;
//            cmd.CommandText = NombreSP;
//            FilasCambiadas = cmd.ExecuteNonQuery();
//            Conexion.Close();
//            return FilasCambiadas;
//        }

//        private void InsertarAutoresEnBD(String RutaBDBiblioteca, String NombreTabla, DataSet ds)
//        {
//            int FilasInsertadas;
//            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
//            {
//                SqlCommand Comando = new SqlCommand();
//                ConstruirParametrosAutores(ref Comando, fila);
//                FilasInsertadas = EjecutarSPAutores(rutaBDBiblioteca, "spInsertarAutor", Comando);
//                MessageBox.Show("Se Insertarón  Datos:" + FilasInsertadas + "Autores");
//            }
//        }


//        private void EliminarAutoresEnBD(String RutaBDBiblioteca, String NombreTabla, DataSet ds)
//        {
//            int FilasEliminadas;
//            foreach (DataRow fila in ds.Tables[NombreTabla].Rows)
//            {
//                SqlCommand Comando = new SqlCommand();
//                fila.RejectChanges();
//                ConstruirParametrosAutoresEliminar(ref Comando, fila);
//                FilasEliminadas = EjecutarSPAutores(rutaBDBiblioteca, "spEliminarAutor", Comando);
//                MessageBox.Show("Se Eliminarón : " + FilasEliminadas + "Autores");
//            }
//        }


//        private void BtnGuardar_Click(object sender, EventArgs e)
//        {
//            ActualizarCambios(rutaBDBiblioteca, ref ds);

//        }

//        private void BtnActualizar_Click(object sender, EventArgs e)
//        {
//            ds.Tables.Clear();
//            SqlConnection cnBiblioteca;
       
//            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

//            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
//            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Autores", cnBiblioteca);

//            adp.Fill(ds, "Autores");
//            Grilla_Aut.DataSource = ds.Tables["Autores"];
            
//            Grilla_Aut.Columns["Cod_Aut"].HeaderText = "Codigo";
//            Grilla_Aut.Columns["Nom_Aut"].HeaderText = "Nombre Autor";
//            Grilla_Aut.Columns["Ape_Aut"].HeaderText = "Apellido Autor  ";
//            Grilla_Aut.Columns["Nac_Aut"].HeaderText = "Nacionalidad";
//            Grilla_Aut.Columns["Web_Aut"].HeaderText = "Web Autor";
//            Grilla_Aut.Columns["Blog_Aut"].HeaderText = "Bolg Autor";
//        }

//        private void BtnSalir_Click(object sender, EventArgs e)
//        {
//            this.Close();
//        }
//    }
//}

   